#include <stdio.h>
#include <stdlib.h>
#include "Processo.h"

void enable_interrupts(){

  printf("Interrupções ativadas\n\n");

}

void disable_interrupts(){
  printf("Interrupções desabitadas\n\n");

}


lock(int M){
   M = 1;
   enable_interrupts();
}

unlock(int M){
  M = 0;
  disable_interrupts();
}


void DesabilitandoInterrupcoes(Processo* p){

    int M = 0; // inicializa
    int habilitacao; // 1 - Interrupções habilitadas 0 - Interrupções desabilitadas
    int y = 0;
    int registrador = M;    //copia o lock para o registrador
    int pid_processo_regiao_critica;
    
    while(y==0){
        if(registrador == 0){//verifica se o look era 0
            registrador = 1;
            printf("O processo %d entrou na região critica e interrupções foram habilitadas!!! \n",p->pid);
            pid_processo_regiao_critica = p->pid;
            lock(habilitacao);
            registrador = 0;
            printf("O processo saiu da região critica e interrupções desabilitadas\n",p->pid);
            // Processo saindo da regiao critica similar da entrada
            unlock(habilitacao);
            y = 1;
        }
        else
            y = sleep();
    }
}




// ************************************************************************
int sleep2(){
 printf("Processo dormindo ...");
 return 1;
}

int y = 0;
void VarTrava(Processo *p){
    int lock = 0;   //atribui o lock para o valor 0
    int registrador = lock;    //copia o lock para o registrador
    int pid_processo_regiao_critica;
    
    while(y==0){
        if(registrador == 0){//verifica se o look era 0
            registrador = 1;
            printf("O processo %d entrou na região critica \n", p->pid);
            pid_processo_regiao_critica = p->pid;
            registrador = 0;
            printf("O processo saiu da região critica \n", p->pid);
            // Processo saindo da regiao critica similar da entrada
            y = 1;
        }
        else
           y = sleep2();
    }
}

/*
int main()
{
    int a;
    VarTrava(a);
    DesabilitandoInterrupcoes(a);
    return 0;
}
 */